﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>AnalyseW</title>
<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../styles/styles.css">
<script language="javascript" src='../links.js' type="text/javascript"></script>
</head>
<body>

<h1>AnalyseW</h1>
<div class=navbar>
<a href="../index.html">главная</a> |
<a href="index.html">экспортируемые функции</a> |
<a href="../panelapi/index.html">Panel API</a>
</div>


<div class=shortdescr>
Far Manager вызывает функцию <code>AnalyseW</code> для открытия панели плагина, эмулирующего файловую систему на базе переданного этой функции файла (например, архива).
</div>


<pre class=syntax>
HANDLE WINAPI AnalyseW(
  const struct AnalyseInfo *Info
);
</pre>

<h3>Параметры</h3>
<div class=descr>
  <div class=dfn>Info</div>
    <div class=dfndescr>Указатель на структуру <a href="../structures/analyseinfo.html">AnalyseInfo</a> -  информация, переданная Far Manager'ом, для анализа плагином содержимого файла.<br>
    В начале функции проверьте, что поле <code>AnalyseInfo.StructSize >= sizeof(AnalyseInfo)</code>.</div>
</div>

<h3>Возвращаемое значение</h3>
<div class=descr>
Если плагин обрабатывает переданный файл и на базе него эмулирует файловую систему, то плагин должен возвращать описатель, отличный от <code>NULL</code> (<code>INVALID_HANDLE_VALUE</code> считается валидным описателем).
</div>

<h3>Замечания</h3>
<div class=descr>
<ol>
<li>Возвращенный плагином описатель будет равен значению поля <a href="../structures/openanalyseinfo.html">OpenAnalyseInfo.Handle</a> в функции <a href="openw.html">OpenW(OPEN_ANALYSE,...)</a>.
<li>Плагин должен освободить память выделенную под описатель в функции <a href="closeanalysew.html">CloseAnalyseW</a> (значение поля <a href="../structures/closeanalyseinfo.html">CloseAnalyseInfo.Handle</a>).
<li>Если плагин будет эмулировать файловую систему, то необходимо сохранить значение поля <code>AnalyseInfo.FileName</code> во внутренних переменных, т.к. позже оно может понадобиться плагину.
<li>Far Manager при нажатии <kbd>Enter</kbd> на выбранном файле опрашивает все плагины, экспортирующих эту функцию. Плагины просматриваются в алфавитном порядке (по имени DLL-модуля) и
кто первый вернул значение, отличное от <code>NULL</code> - тому и отдаётся управление. Данное поведение по умолчанию дополнительно регулируется опцией Far Manager "Параметры менеджера плагинов" - "Обработка файла",
если опция включена, то будет показано меню со всеми плагинами, экспортирующими эту функцию (подробности смотрите в файле помощи Far Manager).
</ol>
</div>

<h3>Пример</h3>
<div class=descr>
Пример из плагина "TmpPanel".
<pre class=code>
HANDLE WINAPI AnalyseW(const struct AnalyseInfo *Info)
{
  if (Info->FileName == nullptr || !Info->BufferSize)
    return nullptr;

  if (!FSF.ProcessName(Opt.Mask, (wchar_t*)Info->FileName, lstrlen(Info->FileName),PN_CMPNAMELIST))
    return nullptr;

  return HANDLE(1); // будем эмулировать панель на базе переданного Far Manager'ом файла
}
</pre>
</div>

<div class=see>Смотрите также:</div>
<div class=seecont>
<a href="closeanalysew.html">CloseAnalyseW</a>
</div>

</body>
</html>
